package com.chapter14.lianxi;

import com.chapter14.demo3.Emp;
import com.chapter14.demo3.EmpFactory;

import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;

/**
 * 使用代码14.15给出的Emp类，完成以下功能：
 *

 *
 */
public class demo2 {

    public static void main(String[] args) {
        Emp[] emps = EmpFactory.getEmp();

        // 1.找出年龄大于30岁的员工，并输出员工的姓名和年龄。
        List<Emp> empList1 = Arrays.stream(emps).filter(emp -> emp.getAge() > 30).collect(Collectors.toList());
        for (Emp emp:empList1){
            System.out.printf("姓名：%s,年龄：%s",emp.getName(),emp.getAge());
            System.out.println();

        }
        //2.将员工的薪水修改为薪水加上奖金，并输出员工的姓名和修改后的薪水值。
        List<Emp> empList2 = Arrays.stream(emps).map(emp -> {
            emp.setSalary(emp.getSalary() + emp.getBonus());
            return emp;
        }).collect(Collectors.toList());
        for (Emp emp:empList2){
            System.out.printf("姓名：%s,修改后的薪水值：%s",emp.getName(),emp.getSalary());
            System.out.println();

        }

        //3.对员工的薪水进行排序，并输出员工的薪水。
        System.out.println(Arrays.stream(emps).sorted(Comparator.comparing(Emp::getSalary)).map(Emp::getSalary).collect(Collectors.toList()));

        //4.找出薪水的最大值和最小值，并输出。
        Optional<Integer> max = Arrays.stream(emps).map(Emp::getSalary).reduce(Integer::max);
        System.out.println("最高工资："+ max.get());
        Optional<Integer> min = Arrays.stream(emps).map(Emp::getSalary).collect(Collectors.minBy(Integer::compare));
        System.out.println("最低工资："+min.get());

        // 5.获取员工薪水的总和和平均值，并输出。
        Double sum = Arrays.stream(emps).collect(Collectors.summingDouble(Emp::getSalary));
        System.out.println("总和工资："+min.get());
        Double average = Arrays.stream(emps).collect(Collectors.averagingDouble(Emp::getSalary));
        System.out.println("平均值工资："+min.get());

         //6.计算员工薪水加奖金的总和，并输出。
        Arrays.stream(emps).map(Emp::getBonus).collect(Collectors.toList());

    }
}
